
#ifndef _JOUEUR_H
#define _JOUEUR_H

/**
 * @file Joueur.h
 * @brief Contient la structure Joueur et ses fonctions
 * @details liste des fonctions pour le module joueur
 * @version 1.0
 * @date 2013/05/16
*/
#include "Des.h"
#include "carte.h"

/**
 * @struct Joueur structure joueur
 * @brief Structure Joueur
 * @details	la structure contient: une chaine de caractère ,un tableau de bonus ,un booleen ,3 entiers etant l'identifiant le score et la position du joueur dans le plateau.
 * @param id l'identifiant du joueur
 * @param position la position du joueur dans le plateau
 * @param scoreCredit le score accumuler par le joueur
 * @param pseudo le pseudonyme du joueur
 * @param bonus_joueur les cartes bonus du joueur
 * @param etat l'etat du joueur par rapport au jeu
*/

typedef struct
{
    int id;
    int position;
    int scoreCredit;
    char * pseudo;
    Carte **mainJoueur;
    int nbMainJoueur;
    int etat;
    int niveauJoueur;

}Joueur;

/**
 * @brief initJoueur initialise id,position,scoreCredit,pseudo(pointeur) a NULL,etat puis alloue un bonus et l'initialise.
 * @param [in-out] *pJou Joueur a initialiser.
 * @return none
*/
void initJoueur (Joueur *);
/**
 * @brief libereJoueur libere bonus et remet les pointeurs a NULL
 * @param [in-out] *pJou Joueur a liberer
 * @return none
*/
void libereJoueur(Joueur *);
/**
 * @brief creerJoueur alloue un joueur l'initialise puis lui affecte un identifiant et un peudo.
 * @return Joueur
*/
Joueur * creerJoueur();
/**
 * @brief detruireJoueur fait appel a libereJoueur
 * @param [in-out] *pJou Joueur à detruire
 * @return none
*/
void detruitJoueur(Joueur **ppJou);
/**
 * @brief set_id mutateur pour modifier l'id du joueur.
 * @param [in-out] *pJou Joueur concerné
 * @param [in] id nouveau identifiant du joueur.
 * @return none
*/
void set_id(Joueur *,int id);
/**
 * @brief get_id accesseur pour acceder a l'id du joueur.
 * @param [in] *pJou Joueur concerné.
 * @return pJou->id l'idenfiant du joueur.
*/
int get_id(const Joueur *);
/**
 * @brief set_pseudo mutateur pour modifier le pseudo du joueur.
 * @param [in-out] *pJou Joueur concerné
 * @param [in] pseudo nouveau pseudo du joueur.
 * @return none
*/
void set_pseudo(Joueur *,const char * pseudo);
/**
 * @brief get_pseudo accesseur pour acceder au pseudo du joueur.
 * @param [in] *pJou Joueur concerné.
 * @return pJou->pseudo le pseudo du joueur
*/
char * get_pseudo(const Joueur *);
/**
 * @brief set_position mutateur pour modifier la position du joueur dans le plateau.
 * @param [in-out] *pJou Joueur concerné
 * @param [in] position nouvelle position du joueur dans le plateau.
 * @return none
*/
void setPosition(Joueur *,int position);
/**
 * @brief get_position accesseur pour acceder a la position du joueur dans le plateau.
 * @param [in] *pJou Joueur concerné.
 * @return pJou->position la position du joueur dans le plateau.
*/
int getPosition(const Joueur *);
/**
 * @brief set_score mutateur pour modifier le score du joueur.
 * @param [in-out] *pJou Joueur concerné
 * @param [in] score nouveau score du joueur.
 * @return none
*/
void setScore(Joueur *,int score);
/**
 * @brief get_score accesseur pour acceder au score du joueur.
 * @param [in] *pJou Joueur concerné.
 * @return pJou->scoreCredit le score du joueur.
*/
int getScore(const Joueur *);
/**
 * @brief set_etat mutateur pour modifier l'etat du joueur.
 * @param [in-out] *pJou Joueur concerné
 * @param [in] etat nouvel etat du joueur.
 * @return none
*/
void set_etat(Joueur *,bool etat);
/**
 * @brief get_etat accesseur pour acceder a l'etat du joueur.
 * @param [in] *pJou Joueur concerné.
 * @return pJou->etat l'etat du joueur.
*/
bool get_etat (const Joueur *);
/**
 * @brief setNiveau mutateur pour modifier le niveau du joueur.
 * @param [in-out] *pJou Joueur concerné
 * @param [in] nouveau niveau du joueur.
 * @return none
*/
void setNiveau(Joueur *, const int);
/**
 * @brief getNiveau accesseur pour acceder à l'indice de plateau du joueur.
 * @param [in] *pJou Joueur concerné.
 * @return le niveau du joueur.
*/
int getNiveau(const Joueur *);


#endif
